package cl.gob.minvu.catastromobile;

import com.google.gson.Gson;

import cl.gob.minvu.catastromobile.entities.Diagnostico;
import cl.gob.minvu.catastromobile.util.GenericUtil;
import android.content.Intent;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Spinner;

/**
 * @author psep
 *
 */
public class DiagnosticoActivity extends AbstractActivity {
	
	private Spinner tipologia;
	private Spinner modalidad;
	private Spinner agrupamiento;
	private EditText pisos;
	private Spinner material;
	private Spinner agua;
	private Spinner alcantarillado;
	private Spinner electricidad;
	private Diagnostico diagnostico;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_diagnostico);
		super.session = super.getSharedPreferences(GenericUtil.SESSION, MODE_PRIVATE);
		this.tipologia = (Spinner) super.findViewById(R.id.spinnerTipologiaDiag);
		this.modalidad = (Spinner) super.findViewById(R.id.spinnerModalidadDiag);
		this.agrupamiento = (Spinner) super.findViewById(R.id.spinnerAgrupamientoDiag);
		this.pisos = (EditText) super.findViewById(R.id.editTextPisosDiag);
		this.material = (Spinner) super.findViewById(R.id.spinnerMaterialDiag);
		this.agua = (Spinner) super.findViewById(R.id.spinnerAguaDiag);
		this.alcantarillado = (Spinner) super.findViewById(R.id.spinnerAlcantarilladoDiag);
		this.electricidad = (Spinner) super.findViewById(R.id.spinnerElectricidadDiag);
		this.onLoadSession();
	}
	
	/**
	 * Método que carga el objeto de sesión
	 */
	private void onLoadSession() {
		String diagnosticoJson = super.session.getString(GenericUtil.DIAGNOSTICO, null);

		if (diagnosticoJson != null) {
			Gson gson = new Gson();
			this.diagnostico = gson.fromJson(diagnosticoJson, Diagnostico.class);
			this.loadTextFrm();
		}
	}
	
	/**
	 * Método que carga datos desde el objeto
	 * hacía el formulario
	 */
	private void loadTextFrm() {
		if (this.diagnostico != null) {
			this.tipologia.setSelection(this.diagnostico.tipologia);
			this.modalidad.setSelection(this.diagnostico.modalidad);
			this.agrupamiento.setSelection(this.diagnostico.agrupamiento);
			this.pisos.setText(String.valueOf(this.diagnostico.pisos));
			this.material.setSelection(this.diagnostico.material);
			this.agua.setSelection(this.diagnostico.agua);
			this.alcantarillado.setSelection(this.diagnostico.alcantarillado);
			this.electricidad.setSelection(this.diagnostico.electricidad);
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.diagnostico, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		
		switch (id) {
		case R.id.diagnostico_frm_descartar:
			this.reset();
			return true;

		case R.id.diagnostico_frm_atras:
			super.startActivity(new Intent(DiagnosticoActivity.this,
					FormActivity.class));
			finish();
			return true;

		default:
			return super.onOptionsItemSelected(item);
		}
	}
	
	/**
	 * Método que carga los datos del formulario
	 * hacía el objeto
	 */
	private void loadDiagnostico() {
		this.diagnostico = new Diagnostico();
		this.diagnostico.tipologia = super.getIdSpinner(this.tipologia);
		this.diagnostico.modalidad = super.getIdSpinner(this.modalidad);
		this.diagnostico.agrupamiento = super.getIdSpinner(this.agrupamiento);
		this.diagnostico.pisos = GenericUtil.stringToInt(super.getStringEditText(this.pisos));
		this.diagnostico.material = super.getIdSpinner(this.material);
		this.diagnostico.agua = super.getIdSpinner(this.agua);
		this.diagnostico.alcantarillado = super.getIdSpinner(this.alcantarillado);
		this.diagnostico.electricidad = super.getIdSpinner(this.electricidad);
	}
	
	/**
	 * @param button
	 */
	public void onClickGuardar(View button) {
		if (this.validateFrm()) {
			this.loadDiagnostico();
			
			Gson gson = new Gson();
			String serializable = gson.toJson(this.diagnostico);
			Editor edit = super.session.edit();
			edit.putString(GenericUtil.DIAGNOSTICO, serializable);
			edit.commit();
			
			super.startActivity(new Intent(DiagnosticoActivity.this,
					FormActivity.class));
			finish();
		}
	}

	@Override
	public void reset() {
		this.diagnostico = null;
		Editor edit = super.session.edit();
		edit.remove(GenericUtil.DIAGNOSTICO);
		edit.commit();
		this.tipologia.setSelection(0);
		this.modalidad.setSelection(0);
		this.agrupamiento.setSelection(0);
		this.pisos.setText("");
		this.material.setSelection(0);
		this.agua.setSelection(0);
		this.alcantarillado.setSelection(0);
		this.electricidad.setSelection(0);
	}

	@Override
	public boolean validateFrm() {
		if (super.getIdSpinner(this.tipologia) == 0) {
			super.toastMsg("Debe seleccionar la Tipología de la Vivienda");
			return false;
		}
		
		if (super.getIdSpinner(this.agrupamiento) == 0) {
			super.toastMsg("Debe seleccionar el Sistema de Agrupamiento");
			return false;
		}
		
		if (GenericUtil.stringToInt(super.getStringEditText(this.pisos)) == 0) {
			this.pisos.setError("Debe ingresar el N° de pisos de la edificación");
			return false;
		}
		
		if (super.getIdSpinner(this.material) == 0) {
			super.toastMsg("Debe seleccionar el materíal predominante de la vivienda");
			return false;
		}
		
		if (super.getIdSpinner(this.agua) == 0
				|| super.getIdSpinner(this.alcantarillado) == 0
				|| super.getIdSpinner(this.electricidad) == 0) {
			super.toastMsg("Debe seleccionar las instalaciones domiciliarias");
			return false;
		}
		
		return true;
	}
}
